home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / mopterm / nyan.plt < prev    next >
Text File  |  1993-07-08  |  44KB  |  1,693 lines

  1. /*                                    *
  2. *     NiftY Auto Navigator(NYAN)        *
  3. *                                    *
  4. *     このオートパイロットについては,流用,変更,組み込み,         *
  5. *                         許可なくOKです。     *
  6. *    ただし,以下の著作権表示については,必ず,コピーして下さい。    *
  7. *                                    *
  8. *    All Right Reserved, Copyright (c)  モップ(NIFTY-PFF00570) 1991    *
  9. *                                 (Masahiro Kezuka)            *
  10. *                                                     *
  11. *                                  1991年 7月  3日 初版  Ver0.01              *
  12. *                                  1991年 7月  7日 2版  Ver0.02              *
  13. *                                  1991年 7月 13日 3版  Ver0.03              *
  14. *                                  1991年 8月  3日 4版  Ver0.04              *
  15. *                                  1992年 9月 18日 5版  Ver0.05              *
  16. *                                    */
  17.  
  18. var modem[40];        /* modem 種別 /NoMNPAT/MNPAT/会社名モデム機種名    */
  19. var telno[30];        /* 電話番号                    */
  20. var telty[10];        /* 回線の種別 1200|2400|2400T            */
  21. var telno2[30];        /* 電話番号(Retry)                */
  22. var telty2[10];        /* 回線の種別(Retry) 1200|2400|2400T        */
  23. var line[5];        /* プッシュ回線か,ダイヤル回線か T/P        */
  24. var id[9];        /* NIFTYのユーザID                */
  25. var pass[9];        /* パスワード                    */
  26. var logd[20];        /* ログ格納用ディレクトリー(最後の\はなし)    */
  27. var forum[1000];    /* フォーラム名( 「,」 で複数)             */
  28. var hp[1000];        /* HP ID/HPパスワード/HP名( 「,」 で複数)    */
  29.  
  30.  
  31. /***********************************************************************
  32. *
  33. *              共通の処理ルーチン
  34. *
  35. ***********************************************************************/
  36. /*  パラメタで指定されたファイルを削除する */
  37. %delfile{ [ filename ]
  38.     dispoff({Yes});
  39.     command({del }|filename);
  40.     dispoff({No})
  41. };
  42.  
  43. /* パラメタで指定されたディレクトリへ移動する(「A:\」と「A:」の両方が可能) */
  44. %setcdir2 {[dir]
  45.     %dir2 @case(@nochar(dir),
  46.         2,{im(dir|{\})},,{im(dir)});
  47.     setcdir(dir2)
  48. };
  49.  
  50. /* 指定されたディレクトリー配下に,第2パラメターで指定されたディレクトリを
  51.      (もし,無ければ)作成する。 */
  52. %mkdir{ [ dir , name ]
  53.     dispoff({Yes});
  54.     case(@setcdir2(dir), {Yes}, {
  55.         command({mkdir } | name )},
  56.       {No},{select({装置(} | dir | {)が使えませんが?},99999,{},
  57.         {  もう一回やってみる },{mkdir(dir,name)},
  58.         {  自動処理をやめる },{stop},
  59.         {  無視して先の処理をやる },{})
  60.            });
  61.     dispoff({No})
  62. };
  63.  
  64. /* 第1パラメタのファイルの中身を 第2パラメタのファイルにコピーする */
  65. %copyfile{[OldName,NewName]
  66.     dispoff({Yes});
  67.     command({copy }| OldName | { } | NewName);
  68.     dispoff({No})
  69. };
  70.  
  71. /* オープンされているメモを全て, クローズする */
  72. %CloseAllMemo{
  73.     case(@mcheck !=0,
  74.     {Yes},{ loop({ mclose(2);
  75.                im(@mcheck !=0)
  76.         })
  77.     })
  78. };
  79.  
  80. /***********************************************************************
  81. *
  82. *              自動的に,Niftyに接続し,目的の処理を行う
  83. *
  84. ***********************************************************************/
  85. %autoacc2{
  86.  
  87. /***********************************************************************
  88. *
  89. *  ROAD1,ROAD2の各タイプに応じて,接続処理を行う 
  90. *
  91. ***********************************************************************/
  92.     %type00 {
  93.     type({.00+});
  94.     wait(20        ,type00,  /* 20秒待って,なにもこないなら,00+ */
  95.              {46+}    ,type00,  /* 46+ なら 00+                      */
  96.              {+\n00+}    ,type00,  /* 00+ なら 00+                      */
  97.              {Enter}    ,      /* Enter C.. なら 終わり */
  98.         );
  99.     };
  100.  
  101.     %Road2c {
  102.     type({C NIF\n});
  103.     wait(20,{stop},{*},Road2c,{Connect},)
  104.     };
  105.  
  106.     %Road2p {
  107.     wait(4,);
  108.     type({@P\n});
  109.     wait(20,{stop},{*},);    /* *を待つ */
  110.     Road2c;
  111.     };
  112.  
  113.     %callrd11 {[telno]
  114.     %MNPOff    @case(@getchar(modemtype,5,1),
  115.             {m},{ im({\N0}) },
  116.             {n},{ im({}    ) } );
  117.     display({ROAD1/1200(} | telno | {)に電話をかけます\n});
  118.     baud(1200);
  119.     dialone({AT} | @head(modem,{/})| MNPOff |
  120.         {D} | line | { } | telno ,
  121.         {type00;im({No})},{im({Yes})})
  122.     };
  123.     %callrd12 {[telno]
  124.     display({ROAD1/2400(} | telno | {)に電話をかけます\n});
  125.     baud(maxbaud);
  126.         dialone({AT} | @head(modem,{/}) |@body(modem,{/},{/}) | {D} | 
  127.         line |     { } | telno ,
  128.         {type00;im({No})},{im({Yes})})
  129.     };
  130.     %callrd2 {[telno]
  131.     display({ROAD2/2400(} | telno | {)に電話をかけます\n});
  132.     baud(maxbaud);
  133.     dialone({AT} | @head(modem,{/}) |@body(modem,{/},{/}) | {D} | 
  134.         line |     { } | telno ,
  135.         {Road2p;im({No})},{im({Yes})})
  136.     };
  137.  
  138.     %callone{[telty,telno]
  139.     case(telty,
  140.         {1200},    {callrd11(telno)},
  141.         {2400},    {callrd12(telno)},
  142.         {2400T},{callrd2(telno)} ,
  143.                ,{im({Yes})}       )
  144.     };
  145.  
  146.     %callnif{
  147.     %modemtype @tail(modem,{_});
  148.     %maxbaud @getchar(modemtype,1,4);
  149.     dispecho({No});
  150.          /* MNPなら, 送信文書はエコーバックを表示する */
  151.     case(@getchar(modemtype,5,1),{m},{dispecho({Yes})});
  152.  
  153.     loop({
  154.         case(@callone(telty,telno),
  155.         {Yes},{        callone(telty2,telno2)
  156.         },{No},{im({No})
  157.         })
  158.     })
  159.     };
  160.  
  161. /***********************************************************************
  162. *
  163. *              未読のメールをダウンする
  164. *
  165. ***********************************************************************/
  166.     %GoMail{
  167.     type({MAIL\n});
  168.     wait(20,{stop},
  169.     {\n>},{
  170.             type({SET MENU OFF\n});
  171.             wait(30,{stop},{\nMAIL>})
  172.     },{\nMAIL>});
  173.  
  174.         type({SET PAGE OFF\n});
  175.         wait(30,{stop},{\nMAIL>})
  176.     };
  177.  
  178.     %Mail2 {
  179.     loop({
  180.         wait(30,{stop},
  181.             {終了)\n>}    ,{type({\n}); im({Yes})},
  182.             {終了)\n:}    ,{type({2\n});im({Yes})},
  183.             {\naction:}    ,{type({SAVE\n});im({Yes})},
  184.             {終了)\n>}    ,{im({No})},
  185.             {\nMAIL>}    ,{im({No})}
  186.         )
  187.     })
  188.     };
  189.  
  190.  
  191.     %MailDown {
  192.     wait(20,{stop},{\n>},);
  193.  
  194.     GoMail;
  195.  
  196.     mkdir(logd,{MAIL});
  197.     receive(logd | {\mail\mail.log});
  198.     type({READ NEW\n});
  199.     Mail2;
  200.     stoprec;
  201.     };
  202.  
  203. /***********************************************************************
  204. *
  205. *  HPの未読をダウンする 
  206. *
  207. ***********************************************************************/
  208.     %GoHP{[name,pass]
  209.         type({GO HP\n});
  210.         wait(30,{stop},{\n>},);
  211.         type({1\n});
  212.         wait(30,{stop},{\n:},);
  213.         type(name|{\n});
  214.     wait(100,{stop},
  215.       {該当する利用者の},{
  216.                 wait(30,{stop},{\n>},);
  217.             im({No})
  218.     },{\nHP>},{
  219.             type({SET PAGE OFF\n});
  220.             wait(100,{stop},{\nHP>},,);
  221.             im({Yes})
  222.     },{\n:},{    type(pass|{\n});
  223.             wait(100,{stop},{\nHP>},,);
  224.             type({SET PAGE OFF\n});
  225.             wait(100,{stop},{\nHP>},,);
  226.             im({Yes})
  227.       });
  228.     };
  229.  
  230.     %oneHP {[name,pass,fname] 
  231.    /* down all message */
  232.     delfile(fname | {.tlt});
  233.         receive(fname | {.tlt});
  234.  
  235.     GoHP(name,pass);
  236.  
  237.     test(,,{\nHP>},{
  238.             stoprec;
  239.         receive(fname | {.log});
  240.         type({READ NEW\n});      /* type first boad number */
  241.         wait(60,{stop},
  242.             {\nHP>}        ,,
  243.                     {◆指定日付以降},{wait(60,{stop},{\nHP>},)}
  244.         );
  245.         stoprec;
  246.         case(id = name,
  247.           {Yes},{
  248.             delfile( fname | {.usr});
  249.             receive(fname | {.usr});
  250.             type({GUEST\n});
  251.             wait(100,stop,{\nHP>});
  252.             stoprec;
  253.         })
  254.     },,{    stoprec
  255.     })
  256.     };
  257.  
  258.     %HP{
  259.     var hp2[200];
  260.     mkdir(logd,{HP});
  261.     hp2 := hp;
  262.     loop({
  263.         %hpset @head(hp2,{,});
  264.         hp2 := @body(hp2,{,});
  265.         oneHP(  @head(hpset,{/}) ,
  266.             @body(hpset,{/},{/}),
  267.             logd | {\hp\} | @tail(hpset,{/}) );
  268.         im( hp2 <> {} )
  269.     });
  270.     };
  271.  
  272. /***********************************************************************
  273. *
  274. *             フォーラムの未読をダウンロードする 
  275. *
  276. ***********************************************************************/
  277.     %GoForum{[fname]
  278.     %SetMode{
  279.             type({SET PAGE OFF\n});
  280.             wait(30,{stop},{\nFORUM>});
  281.             type({SEND OFF\n});
  282.             wait(30,{stop},{\nFORUM>})
  283.     };
  284.     type({GO }| fname |{\n});
  285.     loop({
  286.             wait(30,{stop},
  287.             {終了)\n>}    ,{type({\n});im({Yes})},
  288.             {◆番号又はコマンドを入力},
  289.                      {
  290.                         wait(30,{stop},{\n>},);
  291.                     im({No})},
  292.             {◆現在このフォーラムは},
  293.                      {
  294.                         wait(30,{stop},{\n>},);
  295.                     im({No})},
  296.             {-保守作業の為},
  297.                      {
  298.                         wait(30,{stop},{\n>},);
  299.                     im({No})},
  300.             {終了\n>}    ,{
  301.                         type({SET MENU OFF\n});
  302.                         wait(30,{stop},{\nFORUM>});
  303.                     SetMode;
  304.                     im({No})},
  305.             {\nFORUM>}    ,{
  306.                     SetMode;
  307.                     im({No})}
  308.         )
  309.     });
  310.     };
  311.  
  312.     %oneForum { [ fname ]
  313.  
  314.     %ForumDir   logd | {\} | fname;
  315.  
  316.     %readall{
  317.           %Down3{[boadn]
  318.             stoprec;
  319.             receive( ForumDir | {\MES} | boadn | {.log});
  320.             readall;
  321.         };
  322.             wait(10000,{stop},{◆次頁はありません◆},,
  323.              {MES( 1):},{Down3({01})},{MES( 2):},{Down3({02})},
  324.              {MES( 3):},{Down3({03})},{MES( 4):},{Down3({04})},
  325.              {MES( 5):},{Down3({05})},{MES( 6):},{Down3({06})},
  326.              {MES( 7):},{Down3({07})},{MES( 8):},{Down3({08})},
  327.              {MES( 9):},{Down3({09})},{MES(10):},{Down3({10})},
  328.              {MES(11):},{Down3({11})},{MES(12):},{Down3({12})},
  329.              {MES(13):},{Down3({13})},{MES(14):},{Down3({14})},
  330.              {MES(15):},{Down3({15})},{MES(16):},{Down3({16})},
  331.              {MES(17):},{Down3({17})},{MES(18):},{Down3({18})},
  332.              {MES(19):},{Down3({19})},{MES(20):},{Down3({20})}
  333.             );   
  334.             
  335.     };
  336.  
  337.     mkdir(logd , fname);
  338.     delfile( ForumDir | {\title} | {.log});
  339.         receive( ForumDir | {\title} | {.log});
  340.  
  341.     GoForum(fname);
  342.  
  343.     test(,,{\nFORUM>},{
  344.             type({MES\n});
  345.             wait(50,{stop},{\n>});
  346.             type({MREAD\n\n});
  347.  
  348.             readall;
  349.  
  350.             stoprec;
  351.             wait(30,{stop},{\n>},);
  352.             type({SEND ON\n});
  353.             wait(30,{stop},{\n>},)
  354.     },,{    stoprec;
  355.     })
  356.     };
  357.  
  358.  
  359.     %Forum{
  360.     var f2[1000];
  361.     f2 := forum;  /* forum= 「FORUM1,FORUM2,,,」 */
  362.     loop({
  363.         %fname @head(f2,{,});
  364.         f2 := @body(f2,{,});
  365.         oneForum(  fname );
  366.         im( f2 <> {} )
  367.     });
  368.     };
  369.  
  370. /***********************************************************************
  371. *
  372. *             Niftyの課金情報を見る。
  373. *
  374. ***********************************************************************/
  375.     %bill{
  376.     delfile( logd | {\BILL.LOG});
  377.         receive( logd | {\BILL.LOG});
  378.     type({GO BILL\n});
  379.     wait(30,stop,{\n>},);
  380.     type({2\n});
  381.     wait(30,stop,{了)\n>},);
  382.     stoprec;
  383.     };
  384. /***********************************************************************
  385. *
  386. *             フォーラム, HP , メールに, メッセージをアップする。
  387. *
  388. ***********************************************************************/
  389.     %UpText{
  390.     var IndexLine[82];
  391.     %FNameTop logd | {\UP\};
  392.     %IndexFName FNameTop | {INDEX.TXT}; /* 制御ファイル */
  393.     %SaveFName FNameTop | {SAVE.TXT};   /* 作業用のファイル*/
  394.  
  395.         /* 制御ファイルから, 予約(予)されたファイルを一つ取り出し 
  396.             アップ処理を行う  */
  397.     %UpOne{
  398.         %UpBody{
  399.             %fno @head(@getchar(IndexLine,4,3),{ });
  400.             send( FNameTop | {MES} | fno | {.TXT});
  401.             type({\n/E\n});
  402.             wait(300,{stop},{\n:},);
  403.             type({2\n});
  404.             loop({  /* メールの不在通知のために */
  405.                     wait(30,{stop},
  406.                   {処理)\n>}    ,{type({\n});im({Yes})},
  407.                   {\n:}    ,{im({No})}
  408.                 )
  409.             });
  410.             type({1\n}); /*  2 :For Debug */
  411.         };
  412.         %UpForum{
  413.             %ResNum    @getchar(IndexLine,26,5);
  414.  
  415.             GoForum(@getchar(IndexLine,14,8));
  416.  
  417.                  type({MES }| @getchar(IndexLine,23,2) |{\n});
  418.             wait(30,{stop},{\nCCS(N)>},);
  419.             case( ResNum ,{     }, {
  420.                 type({SAY\n});
  421.                 wait(30,{stop},{\n:},);
  422.                 type({1\n});
  423.             },,{
  424.                 type({RE } | (ResNum+0) |{\n});
  425.             });
  426.             wait(30,{stop},{/E)\n},);
  427.             type({SUB:} | @getchar(IndexLine,32,80) );
  428.             UpBody;
  429.             wait(130,{stop},{\nCCS(N)>},);
  430.             type({SEND ON\n});
  431.             wait(30,{stop},{\nCCS(N)>},); 
  432.         };
  433.         %UpHP{
  434.             %name @head(@getchar(IndexLine,14,8),{ });
  435.             %HPData @tail(@head(hp,{/} | name),{,});
  436.             %HPID   @head(HPData,{/});
  437.             %HPPass @body(HPData,{/},{/});
  438.  
  439.             GoHP(HPID,HPPass);
  440.  
  441.             type({WRITE\n});
  442.                 wait(30,{stop},{\n:},);
  443.             type(@getchar(IndexLine,32,80) );
  444.                 wait(30,{stop},{\n:},);
  445.             type({1\n});
  446.             wait(30,{stop},{/E)\n},);
  447.             UpBody;
  448.                 wait(130,{stop},{\nHP>},);
  449.         };
  450.         %UpMail{
  451.             GoMail;
  452.  
  453.             type({COM\n});
  454.                 wait(30,{stop},{/E)\n},);
  455.             type({SUB:}| @getchar(IndexLine,32,80));
  456.             type({TO:} | @getchar(IndexLine,14,8) | {\n});
  457.             wait(30,{stop},{\n},);
  458.             /*type({FROM:ハンドル名\n});   ハンドルを入れる場合用 */
  459.             wait(30,{stop},{\n},);
  460.             UpBody;
  461.             wait(130,{stop},{\nMAIL>},); 
  462.         };
  463.  
  464.         var Return[4];
  465.         delfile(SaveFName);
  466.         Return := {No};
  467.         fopen(IndexFName);
  468.         loop({    IndexLine := @fread;
  469.             case(@getchar(IndexLine,1,2),
  470.             {予},{    case(@getchar(IndexLine,8,5),
  471.                     {Forum},UpForum,
  472.                     {HP   },UpHP,
  473.                     {Mail },UpMail);
  474.                 IndexLine := {済} | @getchar(IndexLine,3,80);
  475.                 loop({    write(SaveFName,IndexLine  );
  476.                     IndexLine := @fread;
  477.                     im(IndexLine <> {});
  478.                 });
  479.                 copyfile(SaveFName,IndexFName);
  480.                 Return := {Yes};
  481.                 im({No})
  482.             },{保},{write(SaveFName,IndexLine );
  483.                 im({Yes})
  484.             },{済},{write(SaveFName,IndexLine );
  485.                 im({Yes})
  486.             },,{    im({No})
  487.             })
  488.         });
  489.         fclose;
  490.         im(Return)
  491.     };
  492.  
  493.     /* 前回, アップしたファイル(済)を削除する */
  494.     %DelOldText{
  495.         var AnyWrite[3];
  496.         AnyWrite:={No};
  497.         delfile(SaveFName);
  498.         fopen(IndexFName);
  499.         loop({    IndexLine := @fread;
  500.             case(@getchar(IndexLine,1,2),
  501.             {予},{    write(SaveFName,IndexLine );
  502.                 AnyWrite:={Yes};
  503.                 im({Yes})
  504.             },{保},{write(SaveFName,IndexLine );
  505.                 AnyWrite:={Yes};
  506.                 im({Yes})
  507.             },{済},{%fno @head(@getchar(IndexLine,4,3),{ });
  508.                 delfile( FNameTop | {MES} | fno | {.TXT});
  509.                 im({Yes})
  510.             },,{    im({No})
  511.             })
  512.         });
  513.         fclose;
  514.         case(AnyWrite,
  515.         {Yes},{copyfile(SaveFName,IndexFName)},
  516.         {No} ,{delfile(IndexFName)} )
  517.     };
  518.  
  519.     /* UpText Main */
  520.     case(@filechk(IndexFName),
  521.             {Yes},DelOldText);
  522.  
  523.     case(@filechk(IndexFName),
  524.             {Yes},{    loop(UpOne) });
  525.     };
  526.  
  527. /***********************************************************************
  528. *
  529. * メイン処理       Call Telephone and Send Id ,Password
  530. *
  531. ***********************************************************************/
  532.  
  533.     stopbit(1);
  534.     xon({Yes});
  535.     rscs({Yes});
  536.     click({No});
  537.     nattou({Yes});
  538.     account(logd | {\ACCOUNT.TXT},{NIFTY-Serve});
  539.  
  540.     footnote({NIFTY-Serveへ電話をかけています。});
  541.     callnif;
  542.     footnote({NIFTY-Serveの前処理をしています。});
  543.  
  544.     case(id,{},{
  545.         select({ユーザIDの設定がありません。後は手動で?},10,stop,
  546.         {やります},stop,{電話を切ります},{discon;stop})
  547.     });
  548.  
  549.     wait(20,{stop},{Connection-ID  --->},);
  550.     type({SVC\n});
  551.     wait(20,{stop},{Enter User-ID  --->},);
  552.     type( id | {\n});     /* AAA00000は貴方のユーザIDに変更して下さい */
  553.     wait(20,{stop},{Enter Password --->},);
  554.  
  555.     case(pass,
  556.       {},{    footnote({パスワードをキーボードから入れて下さい});
  557.                    /*パスワードを,直接入力する */
  558.         sendtype({Ch/2});
  559.         chat({Yes});
  560.         wait(300,{stop},{ようこそ},);
  561.         chat({No});
  562.         sendtype({Line});
  563.         footnote({前置きの処理をしています。});
  564.          },
  565.         ,{type(pass | {\n})});
  566.  
  567.     setcdir2(logd);
  568.     delfile( logd |  {\title} | {.log});
  569.     receive(logd |  {\title} | {.log});
  570.     loop({
  571.         wait(30,    {stop},
  572.                  {\n>},            {type({\n});im({Yes})},
  573.                  {NIFTY-Serve     TOP},{im({No})}
  574.             )
  575.     });
  576.     wait(30,{stop},{\n>},); 
  577.     stoprec;
  578.  
  579.             /* read mail  */
  580.     footnote({メールの受信処理をしています。});
  581.     type({MCHECK\n});
  582.     wait(30,    {stop},
  583.          {\n>}, ,
  584.          {未読分},MailDown
  585.         );
  586.  
  587.     case( hp<>{},{Yes},{
  588.         footnote({HPの受信処理をしています。});
  589.         HP          /* read hp */
  590.     });
  591.  
  592.     case( forum<>{},{Yes},{
  593.         footnote({フォーラムの受信処理をしています。});
  594.         Forum;      /* read forum */
  595.     });
  596.  
  597.     footnote({文書のアップ処理をしています。});
  598.     UpText;        /* Upload Forum,Hp,Mail */
  599.  
  600.         /* 課金情報の表示 */
  601.     footnote({NIFTYの課金情報を参照しています。});
  602.     bill;
  603.  
  604.     footnote({NIFTYの終了処理をしています。});
  605.     type({bye\n});
  606.     wait(30,,{ました。});
  607.     wait(3);
  608.     discon;
  609.     footnote({});
  610.  
  611. };    /* end of autoacc2 */
  612.  
  613.   /* 残り容量を確認してから, autoacc2を行う */
  614. %autoacc{
  615.     case(@diskrem < (50*1024),
  616.         {Yes},{
  617.                    select({このディスクの残り容量(} | (@diskrem / 1024)
  618.                 | {Kbyte)では不足です。}
  619.             ,30,,    {確認},    )
  620.         },{No},autoacc2
  621.     )
  622. };
  623.  
  624. /***********************************************************************
  625. *
  626. *   ダウンロードした,文書を読む処理
  627. *
  628. ***********************************************************************/
  629.  
  630. /***********************************************************************
  631. *
  632. *    フォーラムの会議室, HPの内容, MAILの内容を一覧,表示,選択可能とする。
  633. *      fname : 会議室のログのファイル名
  634. *      type  : Form:ファーラムの会議室ログ
  635. *              HP  : HPのログ
  636. *              Mail:メールのログ
  637. *      ForumN: フォーラム名,HP名
  638. *
  639. ************************************************************************/
  640. %boadmenu
  641. {[fname,type,ForumN]
  642. var linenum[8]; /* 表示中メッセージの行番号(MEMO.1内の一覧での行位置) */
  643. var FoType[8];  /* Stock :Stock会議室    Cyclic:Cyclic会議室 */ 
  644.  
  645.       /* タイトルを抜き出して,メモに一行のに入れる処理 */
  646.     %setline {
  647.       var item[92];
  648.       case(type,
  649.       {Forum},{
  650.         case(FoType,
  651.         {Stock},{
  652.           item:=@ftell | {  } | @getchar(line,1,3);
  653.           %line2 @fread;
  654.           case(@getchar(line2,27,2),
  655.             {へ},{item:=item | @getchar(line2,23,4)},
  656.                 ,{item:=item | {    }}
  657.           );
  658.           item:=item | @getchar(line,19,80);
  659.         },{Cyclic},{
  660.           item:=@ftell | {  } | @getchar(line,1,5);
  661.           %line2 @fread;
  662.           case(@getchar(line2,29,2),
  663.             {へ},{item:=item | @getchar(line2,23,6)},
  664.                 ,{item:=item | {      }}
  665.           );
  666.           item:=item | @getchar(line,21,80);
  667.         });
  668.         madd(2,item);
  669.     },{HP},{
  670.           item:=@ftell | {  } | @getchar(line,1,3);
  671.           item:=item | { } |@getchar(line,7,14) |
  672.             @getchar(line,23,9) | @getchar(line,37,50);
  673.           madd(2,item);
  674.     },{Mail},{
  675.           item:=@ftell;
  676.           %line2 @fread;
  677.           item:=item | @getchar(line,4,17) | @getchar(line,23,8) |
  678.             @getchar(line,32,6) | { } | @getchar(line2,11,41);
  679.           madd(2,item);
  680.     });
  681.     };
  682.  
  683.     /* オリジナルの題名から, 応答用の題名を作成する関数 */
  684.     %resTitle{[org]
  685.         case(@getchar(org,1,3),
  686.         {Re:},{im( {Re*2:} | @getchar(org,4,80) )},
  687.         {re:},{im( {Re*2:} | @getchar(org,4,80) )},
  688.         {RE:},{im( {Re*2:} | @getchar(org,4,80) )},
  689.         {Re*},{ %after @getchar(org,4,80);
  690.             %num @head(after,{:});
  691.             im( {Re*} | (num+1) | {:} |
  692.                 @body(after,{:},) )
  693.             },
  694.              ,{im( {Re:} | org )}
  695.         )
  696.     };
  697.  
  698.     /* 送信用の文書を,制御ファイルに登録する */
  699.     %SetIndex{
  700.        var fno[5];
  701.        var IndexLine[82];
  702.        var Wtitle[82];
  703.        var Wtitle2[82];
  704.            %Wtype 
  705.            @select({このメッセージを送信予約しますか?。}
  706.             ,99999,{},
  707.             {送信予約する},            {im({予})},
  708.             {送信予約しないが保存する},    {im({保})},
  709.             {保存しないで捨てる。},        {im({捨})},
  710.             {再度,編集に戻る。},        {im({戻})}
  711.             );
  712.         case(Wtype , 
  713.         {捨},{im(Wtype)},
  714.         {戻},{im(Wtype)},
  715.          ,{  /* Wtype = 0 or Wtype = 1 */
  716.         %Line @memo(2,linenum,1);
  717.         case(type,
  718.         {Forum},{
  719.             IndexLine := {Forum:} | 
  720.                 @getchar(ForumN|{       },1,8) | {/} |
  721.                        @head(@tail(fname,{MES}),{.}) | {/} |
  722.                 @case(FoType,{Stock},{
  723.                         im({00}|@getchar(Line,11, 3))},
  724.                              {Cyclic},{getchar(Line,11,5)}) ;
  725.                    Wtitle := @case(FoType,
  726.                     {Stock} ,{getchar(Line,38,80)},
  727.                     {Cyclic},{getchar(Line,41,80)});
  728.         },{HP},{
  729.             IndexLine := {HP   :} | 
  730.                 @getchar(ForumN|{       },1,8) |
  731.                        {         };
  732.                    Wtitle := @getchar(Line,39,80);
  733.         },{Mail},{
  734.             IndexLine := {Mail :} | 
  735.                 @getchar(Line,26,8) |
  736.                        {         };
  737.                    Wtitle := @getchar(Line,41,80);
  738.         });
  739.         Wtitle := @getchar(@resTitle(Wtitle),1,80);
  740.         loop({
  741.             Wtitle2 :=@input({題名を入れて下さい。},,Wtitle) ;
  742.             case(@nochar(Wtitle2)>40,{Yes},{
  743.             footnote({題名は, 全角20文字までです});
  744.             im({Yes})
  745.             },,{im({No})
  746.             });
  747.         });
  748.         footnote({});
  749.         Wtitle := @case( Wtitle2 , {} ,{im(Wtitle)},
  750.                           ,{im(Wtitle2 | {\n})});
  751.  
  752.                fno := 0;
  753.         mkdir(logd , {UP});
  754.         %nametop logd | {\UP\};
  755.                loop({ fno := fno+1;
  756.                 filechk(nametop | {MES} | fno | {.txt})
  757.                });
  758.         fno := @getchar(fno | {   },1,3);
  759.  
  760.         IndexLine := Wtype | { } | fno | { } | IndexLine |
  761.             {:} | Wtitle ;
  762.  
  763.         write( nametop | {INDEX.TXT}, IndexLine);
  764.  
  765.         im( nametop | {MES} | fno | {.txt});
  766.         })
  767.     };
  768.  
  769.   /* メッージを上半分に表示,下半分でコメント書けるようにする
  770.            メモ3がメッセージ, メモ4がコメント   */
  771.     %responce{
  772.         CloseAllMemo;
  773.                mopen(3,0,21,639,250); /* 見るだけの 画面 */
  774.                mclose(1);
  775.         madd(4,{});
  776.                mset(4,{w});
  777.                mopen(4,0,251,639,459); /* コメント用 画面 */
  778.                footnote({終了},{b});
  779.                loop(  {waitx(1000);
  780.                       im(@xtype!=2 && @xtype!=101 && @xtype!=201)
  781.                });
  782.         case(@memo(4) <> {},
  783.         {Yes},{
  784.             %OutFile @SetIndex;
  785.             CloseAllMemo;
  786.                    mset(4,{n});
  787.                 case(OutFile , 
  788.                 {捨},{},
  789.                 {戻},responce,
  790.                      ,{mwrite(OutFile,4)}
  791.             );
  792.         },,{
  793.             CloseAllMemo;
  794.                    mset(4,{n});
  795.         })
  796.     };
  797.  
  798.  
  799.   /* メッセージはメモ2を使用して表示, PF2で前, PF3で後, PF1で終了する。*/
  800.     %dispone{
  801.       var cont[4];
  802.       loop({  cont := {Yes};
  803.               %st @getchar(@memo(2,linenum,1),1,8);
  804.               %len @getchar(@memo(2,linenum+1,1),1,8)-st;
  805.               case( len > 0 ,
  806.                {Yes},{
  807.                   mclear(3);
  808.             mclear(4);
  809.                       mread(fname,3,st,len);
  810.                       mset(3,{r});
  811.                       mopen(3,0,21,639,459); /* 見るだけの画面 */
  812.                       footnote({終了 前  次 応答},
  813.                             {b});
  814.                       loop(  {waitx(1000);
  815.                         im(@xtype<100)
  816.                       });
  817.                       case( @xtype,
  818.                         101, {cont := {No}},
  819.                         201, {cont := {No}},
  820.                         102, {linenum := linenum-1},
  821.                         202, {linenum := linenum-1},
  822.                         103, {linenum := linenum+1},
  823.                         203, {linenum := linenum+1},
  824.                         104, {responce},
  825.                         204, {responce}  
  826.             );
  827.                       case(@mcheck != 0, {Yes}, { mclose(3) });
  828.                       CloseAllMemo;
  829.                });
  830.                im( cont && len>0)
  831.        });
  832.        mset(3,{n})
  833.     };
  834.  
  835.   /* メッセージのタイトルを読みこみ,メモ1にタイトル一覧を作成する */
  836.     mclear(2);
  837.     madd(2,{99999999 } |
  838.       {★表示したいメッセージを左ダブルクリック}|
  839.       {(又はカーソル移動+PF2)してね★\n});
  840.     fopen(fname);
  841.         /* 「/」の位置で,タイトル行を見分けます。 */
  842.     %sulashP @case(type,    
  843.         {Forum},{
  844.             case(@getchar(@read(fname,1,1),6,1)={/} ||
  845.                  @getchar(@read(fname,2,1),6,1)={/} ,
  846.             {Yes},{ FoType:={Cyclic};
  847.                 im(6)
  848.             },,   {FoType:={Stock};
  849.                 im(4)
  850.             })
  851.         },
  852.         {HP},    {im(9)},
  853.         {Mail},    {im(35)} );
  854.     footnote({ログの取り出しをしています。ちょっと,お待ちを!});
  855.     loop({
  856.         %line @fread(sulashP,{/});
  857.         setline;
  858.         im(line <> {})
  859.     });
  860.     fclose;
  861.     
  862.   /* 一覧を表示し,メッセージを選択してもらう */
  863.     linenum:=0;
  864.     mset(2,{r});
  865.     loop({
  866.       mopen(2,0,21,639,459);
  867.       curline(linenum);
  868.       footnote({終了表示},{b});
  869.       loop({waitx(1000);
  870.             im(@xtype!=2 && @xtype<100)
  871.       });
  872.       linenum := @xlinenum;
  873.       case(@xtype,
  874.           2,{ 
  875.           CloseAllMemo;
  876.               dispone; /* 選択されたメッセージの表示 */
  877.               im({Yes})},
  878.         101,{im({No}) },
  879.         102,{ 
  880.           CloseAllMemo;
  881.               dispone; /* 選択されたメッセージの表示 */
  882.               im({Yes})},
  883.         201,{im({No}) },
  884.         202,{ 
  885.           CloseAllMemo;
  886.               dispone; /* 選択されたメッセージの表示 */
  887.               im({Yes})}
  888.       )
  889.     });
  890.     case(@mcheck != 0, {Yes}, { mclose(3) });
  891.     CloseAllMemo;
  892.     mset(2,{n});
  893.     
  894. }; /* end of log menu */
  895.  
  896. %dispFile{[filename]
  897.     case(@filechk(filename),{Yes},{
  898.         mclear(2);
  899.         mread(filename,2);
  900.         mset(2,{r});
  901.         mopen(2,0,21,639,459);
  902.         footnote({終了},{b});
  903.         loop({waitx(1000);
  904.                 im(@xtype!=2 && @xtype<100)
  905.         });
  906.         case(@mcheck != 0, {Yes}, { mclose(3) });
  907.         mset(2,{n})
  908.     },{No},{
  909.         select({受信済みのファイルがありません。},10,{},{確認},)
  910.     })
  911. };
  912.  
  913.  
  914.  
  915. %readdoc{
  916. var boadnum[10];
  917.     %setdocm{
  918.     var f2[1000];
  919.     %oneHP{[name]
  920.         %name2 @getchar(name | {       },1,8);
  921.         madd(1,{<}|name2|{> HPの最新オープンニング\n});
  922.         madd(1,{<}|name2|{> HPの内容              \n});
  923.         case(@filechk( logd |  {\HP\} | fname | {.USR}),{Yes},{
  924.             madd(1,{<}|name2|{> HPの最近の参照者\n})
  925.         })
  926.     };
  927.     %oneBoad{
  928.         %line @fread(23,{/});
  929.         case(line<>{},{Yes},{
  930.               madd(1, {<} | name2 | {> フォーラム } |
  931.                  @getchar(line,1,2) |
  932.                 { 会議室 :} | 
  933.                 @getchar(line,29,80) );
  934.             im({Yes})   /* return Yes for continue    */
  935.         },{No},{im({No})})  /* return No  for end of file */
  936.     };
  937.     %oneForum{[name]
  938.         %name2 @getchar(name | {       },1,8);
  939.         madd(1,{<}|name2|{> フォーラムのオープンニング\n});
  940.         fopen( logd | {\} | name | {\title} | {.log});
  941.         loop({oneBoad});
  942.         fclose;
  943.     };
  944.  
  945.     /* setdocm main start */
  946.     mclear(1);
  947.     madd(1,{  ★  読みたい物を左ダブルクリック}|
  948.            {(又はカーソル移動+PF2)で選択して下さい ★ \n});
  949.     case(@filechk( logd |  {\TITLE.LOG}),
  950.         {Yes},{ madd(1,{             }|
  951.             {最新のNifty オープニングメッセージ \n})});
  952.     case(@filechk( logd |  {\BILL.LOG}),
  953.         {Yes},{ madd(1,{             }|
  954.             {最新のNifty 課金情報(3か月分文)\n})});
  955.     case(@filechk( logd |  {\ACCOUNT.TXT}),
  956.         {Yes},{ madd(1,{             }|
  957.             {アクセス履歴情報\n})});
  958.     case(@filechk(logd | {\MAIL\MAIL.LOG}),
  959.         {Yes},{    madd(1,{             }|
  960.             {受信したメールの内容 \n})});
  961.  
  962.     f2 := hp;
  963.     loop({
  964.         %fname @tail(@head(f2,{,}),{/});
  965.         f2 := @body(f2,{,});
  966.         case(@filechk( logd |  {\HP\} | fname | {.TLT}),
  967.             {Yes},{oneHP(  fname )});
  968.         im( f2 <> {} )
  969.     });
  970.  
  971.     f2 := forum;
  972.     loop({
  973.         %fname @head(f2,{,});
  974.         f2 := @body(f2,{,});
  975.         case(@filechk( logd |  {\} | fname | {\title} | {.log}),
  976.             {Yes},{oneForum(  fname )});
  977.         im( f2 <> {} )
  978.     });
  979.     }; /* end of setdocm */
  980.  
  981.     %dispboad{
  982.     %line @memo(1,boadnum,1);
  983.         %type @getchar(line,14,14);
  984.         %name @getchar(line,3,8);
  985.     case(type,
  986.     {最新のNifty オ},{dispFile( logd |  {\TITLE.LOG})},
  987.     {最新のNifty 課},{dispFile( logd |  {\BILL.LOG})},
  988.     {アクセス履歴情},{dispFile( logd |  {\ACCOUNT.TXT})},
  989.     {受信したメール},{
  990.         %filename logd | {\MAIL\MAIL.LOG};
  991.         case(@filechk(filename),{Yes},{boadmenu(filename,{Mail},name)},
  992.             ,{select(
  993.             {受信済のメールがありません。},10,{},{OK?},)
  994.             })
  995.     },
  996.     {HPの最新オープ},{dispFile( logd | {\HP\} | name | {.TLT})},
  997.     {HPの内容      },{
  998.         %filename logd | {\HP\} | name | {.LOG};
  999.         case(@filechk(filename),{Yes},{boadmenu(filename,{HP},name)},
  1000.             ,{select({このHPには}|
  1001.             {受信済のメッセージがありません。},10,{},{OK?},)
  1002.             })
  1003.     },
  1004.     {HPの最近の参照},{dispFile( logd | {\HP\} | name | {.USR})},
  1005.     {フォーラムのオ},{dispFile( logd | {\} | name | {\TITLE.LOG})},
  1006.     /*会議室*/     ,{
  1007.         case(@getchar(line,14,10),{フォーラム},{
  1008.         %num @case(@getchar(line,25,1),
  1009.                 { },{im({0}|@getchar(line,26,1))},
  1010.                    ,{getchar(line,25,2)}
  1011.         );
  1012.         %filename logd | {\} | name | {\} |
  1013.                     {MES} | num | {.LOG};
  1014.         case(@filechk(filename),{Yes},{boadmenu(filename,{Forum},name)},
  1015.             ,{select({この会議室には,}|
  1016.             {受信済のメッセージがありません。},10,{},{OK?},)
  1017.             })
  1018.         })
  1019.     }) /* end of case */
  1020.  
  1021.     };
  1022.  
  1023. footnote({受信文書の一覧を作成中です。});
  1024. setdocm;
  1025. mset(1,{r});
  1026. boadnum :=0;
  1027. loop({
  1028.   mopen(1,0,21,639,459);
  1029.   curline(boadnum);
  1030.   footnote({終了表示},{b});
  1031.   loop(  {waitx(1000);
  1032.           im(@xtype!=1 && @xtype<100)
  1033.          }
  1034.   );
  1035.   boadnum := @xlinenum;
  1036.   case(@xtype,
  1037.       1,{ CloseAllMemo;
  1038.           dispboad;
  1039.           im({Yes})
  1040.     },
  1041.     101,{ im({No}) },
  1042.     102,{ CloseAllMemo;
  1043.           dispboad;
  1044.           im({Yes})
  1045.     },
  1046.     201,{ im({No}) },
  1047.     202,{ CloseAllMemo;
  1048.           dispboad;
  1049.           im({Yes})
  1050.     },
  1051.        ,{ CloseAllMemo;
  1052.           im({Yes})
  1053.     }
  1054.   )
  1055. });
  1056. case(@mcheck != 0, {Yes}, { mclose(3) });
  1057. CloseAllMemo;
  1058. mset(2,{n});
  1059. mset(1,{n});
  1060. footnote({});
  1061.  
  1062. }; /* end of read doc */
  1063.  
  1064. /************************************************************************
  1065. *
  1066. *         送信文書の作成/更新処理
  1067. *
  1068. *************************************************************************/
  1069. %senddoc{
  1070.     var IndexLine[82];
  1071.     %FNameTop logd | {\UP\};
  1072.     %IndexFName FNameTop | {INDEX.TXT}; /* 制御ファイル */
  1073.     %SaveFName FNameTop | {SAVE.TXT};   /* 作業用のファイル*/
  1074.  
  1075.       /* set destination (21byte) 
  1076.                                         */
  1077.     %SetDest{
  1078.     %DestMail{
  1079.         %name @input({送信先のIDを入れて下さい。}) ;
  1080.         case( @nochar(name)!=8,{Yes},{
  1081.             footnote({「}|name|{」は 英数字8文字でありません});
  1082.             DestMail
  1083.         },,{
  1084.             footnote({});
  1085.             im({Mail :} | name | {         })
  1086.         })
  1087.     };
  1088.  
  1089.     %DestHP{
  1090.         %name @input({HPの名前を入れて下さい。}) ;
  1091.         case( hp = @head(hp,{/}|name),{Yes},{
  1092.             footnote({「}|name|{」は 登録されていません});
  1093.             DestHP
  1094.         },,{
  1095.             footnote({});
  1096.             im({HP   :} | @getchar(name|{       },1,8)
  1097.              | {         })
  1098.         })
  1099.     };
  1100.  
  1101.     %DestForum{
  1102.         var boad[10];
  1103.         var org[10];
  1104.         %name @input({フォーラムの名前を入れて下さい。}) ;
  1105.         case( forum = @head(forum,name),{Yes},{
  1106.             footnote({「}|name|{」は 登録されていません});
  1107.             DestForum
  1108.         },,{
  1109.             %ans @input({「会議室番号」又は「会議室番号,コメント先」}) ;
  1110.             case(ans=@head(ans,{,}),
  1111.             {Yes},{    boad:=ans+0;
  1112.                 org :={     }
  1113.             },{No},{boad:=@head(ans,{,})+0;
  1114.                 org :=@head(ans,{,})+0
  1115.             });
  1116.             case( boad<1 || boad>20 ||
  1117.                 (org<>{     }) && (org<1 || org>99999),
  1118.             {Yes},{
  1119.                 footnote({会議室番号, コメント先がおかしいです});
  1120.                 DestForum;
  1121.             },,{
  1122.                 footnote({});
  1123.                 case(@nochar(boad),1,{boad:={0}|boad});
  1124.                 case(@nochar(org), 1,{org:={0000}|org},
  1125.                            2,{org:={000} |org},
  1126.                            3,{org:={00}  |org},
  1127.                            4,{org:={0}   |org});
  1128.                 im({Forum:} | 
  1129.                     @getchar(name|{       },1,8) | {/} |
  1130.                            boad | {/} | org ) 
  1131.             });
  1132.         })
  1133.     };
  1134.     
  1135.     select({何に使いますか?}
  1136.         ,99999,{im({})},
  1137.         {  メール  },             DestMail,
  1138.         {  HPへのアップ  },         DestHP,
  1139.         {  会議室へのアップ  },        DestForum,
  1140.         {  メインメニューに戻る },    {im({})});
  1141.     };
  1142.  
  1143.     %ChgIndex{[Proc]
  1144.     var WorkLine[82];
  1145.     delfile(SaveFName);
  1146.     fopen(IndexFName);
  1147.     loop({    WorkLine := @fread;
  1148.         case(@getchar(IndexLine,4,3) = @getchar(WorkLine,4,3),
  1149.         {No},{    write(SaveFName,WorkLine );
  1150.             im({Yes})
  1151.         },{Yes},{ Proc;
  1152.             im({Yes})
  1153.         });
  1154.         im(WorkLine<>{})
  1155.     });
  1156.     fclose;
  1157.     copyfile(SaveFName,IndexFName);
  1158.     };
  1159.  
  1160.     %DelDoc{
  1161.     ChgIndex({
  1162.         %fno @head(@getchar(IndexLine,4,3),{ });
  1163.         delfile( FNameTop | {MES} | fno | {.TXT});
  1164.     })
  1165.     };
  1166.  
  1167.     %SetDoc{[type]
  1168.     ChgIndex({
  1169.         IndexLine := type | @getchar(IndexLine,3,80);
  1170.         write(SaveFName,IndexLine  );
  1171.     })
  1172.     };
  1173.  
  1174.     %SetTDoc{
  1175.     %Wtitle  @getchar(IndexLine,32,40);
  1176.     %Wtitle2 @input({題名を入れて下さい。},,Wtitle) ;
  1177.     case( Wtitle2 <>{} && (Wtitle2 | {\n})<>Wtitle,{Yes},{
  1178.         ChgIndex({
  1179.             IndexLine := @getchar(IndexLine,1,31) |
  1180.                 Wtitle2 | {\n};
  1181.             write(SaveFName,IndexLine  );
  1182.         })
  1183.     })
  1184.     };
  1185.  
  1186.     %SetDDoc{
  1187.     %Dest @SetDest;
  1188.     case( Dest<>{} && Dest<>@getchar(IndexLine,8,23),{Yes},{
  1189.         ChgIndex({
  1190.             IndexLine := @getchar(IndexLine,1,7) |
  1191.                 Dest | @getchar(IndexLine,31,80);
  1192.             write(SaveFName,IndexLine  );
  1193.         })
  1194.     })
  1195.     };
  1196.  
  1197.     %UpdDoc{
  1198.     %fno @head(@getchar(IndexLine,4,3),{ });
  1199.     %fname   FNameTop | {MES} | fno | {.TXT};
  1200.     mclear(2);
  1201.     mread(fname,2);
  1202.            mset(2,{w});
  1203.     mopen(2,0,21,639,459);
  1204.            footnote({更新破棄},{b});
  1205.            loop(  {waitx(1000);
  1206.                   im(@xtype!=2 && @xtype!=101 && @xtype!=201 &&
  1207.                 @xtype!=102 && @xtype!=202)
  1208.            });
  1209.     %endtype @xtype;
  1210.     CloseAllMemo;
  1211.            mset(2,{n});
  1212.     case( endtype==101 || endtype==201,{Yes},{
  1213.         mwrite(fname,2)
  1214.     })
  1215.     };
  1216.  
  1217.     %OneDoc{
  1218.     case(IndexLine<>{},{Yes},{
  1219.             CloseAllMemo;
  1220.         select({どういう処理を行いますか? :}|
  1221.                 @head(@getchar(IndexLine,30,40),{\n})
  1222.             ,99999,{},
  1223.             {  削除する  },         DelDoc,
  1224.             {  送信を保留しておく  },    {SetDoc({保})},
  1225.             {  次回の送信を予約する  },     {SetDoc({予})},
  1226.             {  題名を変更する },        SetTDoc,
  1227.             {  あて先を変更する },        SetDDoc,
  1228.             {  文書内容を変更する },    UpdDoc,
  1229.             {  何もしないで戻る },        )
  1230.     })
  1231.     
  1232.     };
  1233.  
  1234.     %OldDoc{
  1235.     
  1236.     case(@filechk(IndexFName),
  1237.     {No},{
  1238.         select({作成済の送信文書がありません。}
  1239.             ,20,{},    {  確認  },     ,)
  1240.     },{Yes},{
  1241.         loop({
  1242.           mclear(1);
  1243.           mread(IndexFName,1);
  1244.           mset(1,{r});
  1245.           mopen(1,0,21,639,459);
  1246.           footnote({終了選択},{b});
  1247.           loop(  {waitx(1000);
  1248.                   im(@xtype!=1 && @xtype<100)
  1249.                  }
  1250.           );
  1251.           IndexLine := @memo(1,@xlinenum,1);
  1252.           case(@xtype,
  1253.               1,{ 
  1254.                 OneDoc;
  1255.                 im({Yes})},
  1256.             102,{ 
  1257.             OneDoc;
  1258.                 im({Yes})},
  1259.             202,{ 
  1260.             OneDoc;
  1261.                 im({Yes})},
  1262.             101,{im({No}) },
  1263.             201,{im({No}) },
  1264.                ,{CloseAllMemo;
  1265.                  im({Yes}) }
  1266.           )
  1267.         });
  1268.         case(@mcheck != 0, {Yes}, { mclose(3) });
  1269.         CloseAllMemo;
  1270.         mset(2,{n});
  1271.         mset(1,{n});
  1272.         footnote({});
  1273.  
  1274.     })
  1275.     }; /* end of Old Doc */
  1276.  
  1277.     %NewDoc2{[Dest,Title]
  1278.     var fno[10];
  1279.     var endtype[3];
  1280.     madd(1,{});
  1281.     mclear(2);
  1282.     madd(2,{});
  1283.            mset(2,{w});
  1284.     mopen(2,0,21,639,459);
  1285.     loop({
  1286.                footnote({終了},{b});
  1287.                loop(  {waitx(1000);
  1288.                       im(@xtype!=2 && @xtype!=101 && @xtype!=201)
  1289.                });
  1290.         footnote({});
  1291.         endtype :=@select({このメッセージを送信予約しますか?。}
  1292.                 ,99999,{},
  1293.                 {送信予約する},            {im({予})},
  1294.                 {送信予約しないが保存する},    {im({保})},
  1295.                 {保存しないで捨てる。},        {im({捨})},
  1296.                 {再度,編集に戻る。},        {im({戻})}
  1297.                 );
  1298.         im(endtype = {戻})
  1299.     });
  1300.     CloseAllMemo;
  1301.            mset(2,{n});
  1302.     case( endtype={予} || endtype={保}   ,{Yes},{
  1303.                fno := 0;
  1304.         mkdir(logd , {UP});
  1305.                loop({ fno := fno+1;
  1306.                 filechk(FNameTop | {MES} | fno | {.txt})
  1307.                });
  1308.         fno := @getchar(fno | {   },1,3);
  1309.  
  1310.         IndexLine := endtype | { } | fno | { } | Dest |
  1311.             {:} | Title | {\n};
  1312.         write( IndexFName , IndexLine);
  1313.         %fname   FNameTop | {MES} | fno | {.TXT};
  1314.         mwrite(fname,2);
  1315.     });
  1316.     
  1317.     }; /* end of New Doc2 */
  1318.  
  1319.     %NewDoc{
  1320.     var Title[82];
  1321.     %Dest @SetDest;
  1322.     case(Dest<>{},{Yes},{
  1323.         loop({
  1324.             Title :=@input({題名を入れて下さい。});
  1325.             case(@nochar(Title)>40,{Yes},{
  1326.             footnote({題名は, 全角20文字までです});
  1327.             im({Yes})
  1328.             },,{im({No})
  1329.             });
  1330.         });
  1331.         footnote({});
  1332.         case(Title<>{},{Yes},{
  1333.             NewDoc2(Dest,Title);
  1334.         })
  1335.     })
  1336.     };
  1337.  
  1338.     /* senddoc main start */
  1339.     select({どういう処理を行いますか?}
  1340.     ,99999,{},
  1341.     {  既存の送信文書の再処理  },     OldDoc,
  1342.     {  新しい送信文書の作成  },    NewDoc,
  1343.     {  メインメニューに戻る。  },     {} )
  1344.     
  1345. }; /* end of senddoc */
  1346.  
  1347. /************************************************************************
  1348. *
  1349. *         設定処理ルーチン群
  1350. *
  1351. *************************************************************************/
  1352. %setat{
  1353.     var type[10];
  1354.         type := @select({どういうタイプのモデムですか?}
  1355.     ,99999,{},
  1356.     {  1200                   MNPなし  },     {im({1200n})},
  1357.     {  2400                   MNPなし  },    {im({2400n})},
  1358.     {  2400(端末速度2400)     MNPあり  },    {im({2400m})},
  1359.     {  2400(端末速度4800以上)  MNPあり  },    {im({4800m})},
  1360.     /*{  2400以上(端末速度9600以上) MNPあり  },    {im({9600m})},*/
  1361.       );
  1362.     case(type,{},{type:={1200n}});
  1363.     
  1364.     %a @input({ATコマンド設定して下さい。例「ATX3\N3\V1\Q3\J0」},,
  1365.         {AT}|@head(modem,{/}));
  1366.     case(a<>{},{Yes},{
  1367.         case(@getchar(a,1,2),
  1368.         {AT},{
  1369.             case( a = @head(a,{\}),
  1370.             {Yes},{modem:=@getchar(a,3,999)|{/}|@getchar(a,3,999)|
  1371.                 {/AT直接指定_}|type;
  1372.             },,{   modem:=@getchar(a,3,999)|{/}|
  1373.                 {/AT直接指定_}|type;
  1374.             });
  1375.         },
  1376.             ,{setat});
  1377.     });
  1378. };
  1379.  
  1380. %setmodem{
  1381.     select({モデムの機種を選んで下さい。現在は「} |
  1382.         @head(@tail(modem,{/}),{_}) | {」です。}
  1383.     ,99999,{},
  1384.     {変更しない},{},
  1385.     {内蔵1200},         {modem :={X3//内蔵1200_1200n} },
  1386.     {内蔵2400},        {modem :={X3/\N3\V1\Q3\J0/内蔵2400_4800m} },
  1387.     {富士通 PM1200},     {modem :={X3//PM1200_1200n} },
  1388.     {富士通 PM2400},    {modem :={X3/\N3\V1\Q3\J0/PM2400_4800m} },
  1389.     {AIWA PV-A1200},    {modem :={X3//PV-A1200_1200n} },
  1390.     {AIWA PV-A2400},    {modem :={X3//PV-A2400_2400n} },
  1391.     {AIWA PV-A24MNP5},    {modem :={X3&D2/\N3\Q3\J0/PV-A24MNP5_4800m} },
  1392.     {AIWA PV-A24V42},    {modem :={X3&D2/\N3\Q3\J0/PV-A24V42_4800m} },
  1393.     {EPSON SR-120S},    {modem :={X3//SR-120S_1200n} },
  1394.     {EPSON SR-240AT},    {modem :={X3//SR-240AT_2400n} },
  1395.     {OMRON MD1200},        {modem :={X3//MD1200_1200n} },
  1396.     {OMRON MD12FS},        {modem :={X3//MD12FS_1200n} },
  1397.     {OMRON MD2400F},    {modem :={X3/\N3\V1\Q2\J0/MD2400F_2400m} },
  1398.     {OMRON MD24FS4},    {modem :={X3/\N3\Q2\J0/MD24FS4_2400m} },
  1399.     {OMRON MD24FP4},    {modem :={X3/\N3\Q2\J0/MD24FP4_2400m} },
  1400.     {OMRON MD24FS5},    {modem :={X3/\N3\Q2\J0/MD24FS5_2400m} },
  1401.     {OMRON MD24FS7},    {modem :={X3/\N3\Q2\J0/MD24FS7_2400m} },
  1402.     {NEC COMSTAR 2424},    {modem :={X3/\N3\Q2/COMSTAR 24_2400m} },
  1403.     {ATコマンド直設定},    {setat}
  1404.     )
  1405.  
  1406. };
  1407.  
  1408. %settelno{
  1409.     %a @input({近くのNiftyの電話番号を設定して下さい。例「0559235038」},,
  1410.         telno);
  1411.     case(a<>{},{Yes},{telno := a});
  1412. };
  1413.  
  1414. %settelty{
  1415.     %name @case(telty,
  1416.         {1200},{im({1200 ROAD1})},
  1417.         {2400},{im({2400 ROAD1})},
  1418.         {2400T},{im({2400 ROAD2})},
  1419.               ,{im({設定なし})} );
  1420.     select({アクセス・ポイントのタイプを選んで下さい。現在は「}|name|{」です。}
  1421.     ,99999,{},
  1422.     {   変更しない  },{},
  1423.     {  回線速度=1200 ROAD1  },     {telty :={1200} },
  1424.     {  回線速度=2400 ROAD1  },    {telty :={2400} },
  1425.     {  回線速度=2400 ROAD2  },     {telty :={2400T} } )
  1426.     
  1427. };
  1428.  
  1429. %setline{
  1430.     %name @case(line,
  1431.         {T},{im({プッシュ回線})},
  1432.         {P},{im({ダイヤル回線})},
  1433.               ,{im({設定なし})} );
  1434.     select({電話回線のタイプを選んで下さい。現在は「}|name|{」です。}
  1435.     ,99999,{},
  1436.     {   変更しない  },{},
  1437.     {  プッシュ回線  },     {line :={T} },
  1438.     {  ダイヤル回線  },    {line :={P} })
  1439.     
  1440. };
  1441.  
  1442. %setlogd2{
  1443.     %setlogd2{[old]
  1444.         %a @input({この格納先は今,使用できませんが?。 例「B:」},,
  1445.             old);
  1446.         case(a<>{},{Yes},{
  1447.             case(@setcdir2(a),{Yes},{logd := a},
  1448.                            ,{setlogd2(a)})
  1449.         })
  1450.     };
  1451.  
  1452.     %a @input({受信データの格納先を設定して下さい。例「B:」,「C:\NIF」},,
  1453.         logd);
  1454.     case(a<>{},{Yes},{
  1455.         case(@setcdir2(a),{Yes},{logd := a},
  1456.                        ,{setlogd2(a)})
  1457.     })
  1458. };
  1459.  
  1460. %setlogd{
  1461.     %cur @case(logd,
  1462.         {A:},{im({0番のフロッピー(A:)})},
  1463.         {B:},{im({1番のフロッピー(B:)})},
  1464.         {D:},{im({ハードディスク (D:)})},
  1465.         {E:},{im({ハードディスク (E:)})},
  1466.         {F:},{im({ハードディスク (F:)})},
  1467.         {G:},{im({ハードディスク (G:)})},
  1468.             ,{im({パスの直接設定})}
  1469.     );
  1470.     select({文書を格納する装置は?。現在は「} | cur | {」}
  1471.     ,99999,{},
  1472.     {変更しない},{},
  1473.     {0番のフロッピー(A:)},    {logd :={A:} },
  1474.     {1番のフロッピー(B:)},    {logd :={B:} },
  1475.     {ハードディスク (D:)},    {logd :={D:} },
  1476.     {ハードディスク (E:)},    {logd :={E:} },
  1477.     {ハードディスク (F:)},    {logd :={F:} },
  1478.     {ハードディスク (G:)},    {logd :={G:} },
  1479.     {パスを直接入力する},    {setlogd2}
  1480.     )
  1481.  
  1482. };
  1483.  
  1484.  
  1485. %setid{
  1486.     %setid2{[old]
  1487.         %a @input({ユーザIDは8文字です。 例「BBB00123」},,
  1488.             old);
  1489.         case(a<>{},{Yes},{
  1490.             case(@nochar(a)=8,{Yes},{id := a},
  1491.                            ,{setid2(a)})
  1492.         })
  1493.     };
  1494.  
  1495.     %a @input({NiftyのユーザIDを設定して下さい。例「AAA00321」},,
  1496.         id);
  1497.     case(a<>{},{Yes},{
  1498.         case(@nochar(a)=8,{Yes},{id := a},
  1499.                        ,{setid2(a)})
  1500.     })
  1501. };
  1502.  
  1503. %setpass{
  1504.     %setpassn{
  1505.     %setpass2{[old]
  1506.         %a @input({パスワードは8文字以下です。 例「MIKENEKO」},,
  1507.             old);
  1508.         case(a<>{},{Yes},{
  1509.             case(@nochar(a)<=8,{Yes},{pass := a},
  1510.                            ,{setpass2(a)})
  1511.         })
  1512.     };
  1513.  
  1514.     %a @input({Niftyのパスワードを設定して下さい。例「POCHIINU」},,
  1515.         pass);
  1516.     case(a<>{},{Yes},{
  1517.         case(@nochar(a)<=8,{Yes},{pass := a},
  1518.                        ,{setpass2(a)})
  1519.     })
  1520.     };
  1521.           /* setapass 本体 */
  1522.     %name @case(pass,
  1523.         {},{im({アクセス時に入力})},
  1524.           ,{im({予め設定済})} );
  1525.     select({パスワードを設定しておきますか?。現在は「}|name|{」です。}
  1526.     ,99999,{},
  1527.     {   変更しない  },{},
  1528.     {  他の人が使うので,アクセス時に入力する  },     {pass :={} },
  1529.     {  専用なので,予め設定しておく   },    {setpassn })
  1530.     
  1531. };  /* end of setpass */
  1532.  
  1533. %setforum{
  1534.     var dispOne[1000];
  1535.     %checkForum{[text]
  1536.         %topname @head(text,{,});
  1537.         case(@nochar(topname)<=8,
  1538.             {Yes},{
  1539.                 case(topname ,
  1540.                     text,{im({Yes})},
  1541.                         ,{checkForum(@body(text,{,}))})
  1542.             },,{
  1543.                 footnote({「} | topname | {」は8文字以上です});
  1544.                 im({No})
  1545.         })
  1546.     };
  1547.  
  1548.     dispOne := forum;
  1549.     loop({
  1550.         %a @input({巡回するフォーラムを「,」で区切って, 設定して下さい。\n}|
  1551.               {                               例「FTOWNS1,FFMHOB」},,
  1552.             dispOne);
  1553.         case(a<>{},{Yes},{
  1554.             dispOne := a;
  1555.             case(@checkForum(a),{Yes},{ forum:=a; im({No}) },
  1556.                               ,{           im({Yes}) })
  1557.         },,{im({No})
  1558.         })
  1559.     });
  1560.     footnote({});
  1561. };
  1562.  
  1563. %sethp{
  1564.     var dispOne[1000];
  1565.     %checkHP{[text]
  1566.         %topname @head(text,{,});
  1567.         %id     @head(topname,{/});
  1568.         %pass     @body(topname,{/},{/});
  1569.         %hpname @tail(topname,{/});
  1570.         case(@nochar(id)==8 && @nochar(pass)<=8 && @nochar(hpname)<=8,
  1571.             {Yes},{
  1572.                 case(topname ,
  1573.                     text,{im({Yes})},
  1574.                         ,{checkHP(@body(text,{,}))})
  1575.             },,{
  1576.                 footnote({「} | topname | {」は文字数が合いません。});
  1577.                 im({No})
  1578.         })
  1579.     };
  1580.  
  1581.     dispOne := hp;
  1582.     loop({
  1583.         %a @input({巡回するHPを設定して下さい。\n\n}|
  1584.              {  形式「ID/パスワード/名前,ID2/パスワード2/名前2,,,」\n}|
  1585.              {    ID:HP主催者のID パスワード:HPのパスワード \n}|
  1586.              {    名前:英字8文字以下の名前(任意の識別名)\n\n}|
  1587.              {   例「PFF00570/HACHIKOU/MOPROOM,}|
  1588.                            {KKK00123/AKITAKEN/FUFUFU」},,
  1589.             dispOne);
  1590.         case(a<>{},{Yes},{
  1591.             dispOne := a;
  1592.             case(@checkHP(a),{Yes},{ hp:=a; im({No}) },
  1593.                            ,{        im({Yes}) })
  1594.         },,{im({No})
  1595.         })
  1596.     });
  1597.     footnote({});
  1598. };
  1599.  
  1600. %setupplt{
  1601.     %putplp{[id,data]
  1602.         write(fname, id | @xc({09}) | {:=} | @xc({7b}) |
  1603.             data | @xc({7d}) | {;\n})
  1604.     };
  1605.    var loopon[5];
  1606.    loop({
  1607.     loopon := {Yes};
  1608.     select({設定する項目を選択して下さい。},99999,{},
  1609.         {設定処理を終了する},                {loopon:={No}},
  1610.         {タウンズに接続したモデムの種類(会社名,機種名)},{setmodem},
  1611.         {最寄りのNiftyのアクセスポイントの電話番号},    {settelno},
  1612.         {最寄りのアクセスポイントの種別(速度・ROAD1/2)},    {settelty},
  1613.         {電話回線の種類(ダイヤル/プッシュ回線)},    {setline},
  1614.         {受信データの格納先(ドライブ名・パス名)},    {setlogd},
  1615.         {NiftyのユーザID},                {setid},
  1616.         {Niftyのパスワード(通信時に入れることも可能)},    {setpass},
  1617.         {巡回するフォーラムの設定(複数可能)},        {setforum},
  1618.         {巡回するHPの設定(複数可能)},            {sethp});
  1619.     /*im(modem={} || telno={} || line={} || id={})*/
  1620.     im(loopon)
  1621.     });
  1622.     %fname current | {\MOPSET.PLP};
  1623.     case(@filechk( fname ),
  1624.         {Yes},{delfile( fname )});
  1625.     putplp({modem},modem);
  1626.     putplp({telno},telno);
  1627.     putplp({telty},telty);
  1628.     putplp({telno2},telno2);
  1629.     putplp({telty2},telty2);
  1630.     putplp({line},line);
  1631.     putplp({id},id);
  1632.     putplp({pass},pass);
  1633.     putplp({logd},logd);
  1634.     putplp({forum},forum);
  1635.     putplp({hp},hp);
  1636.  
  1637. };
  1638. /***********************************************************************
  1639. *
  1640. *              MOPTERMの終了処理
  1641. *
  1642. ***********************************************************************/
  1643. %stopmop{
  1644.     select({本当に終了して良いですか?},99999,{},
  1645.           {  はい   },{stopterm},
  1646.       {  いいえ  },{})
  1647. };
  1648.  
  1649.  
  1650.  
  1651. /***********************************************************************
  1652. *
  1653. *              全体のメイン処理
  1654. *
  1655. ***********************************************************************/
  1656.  
  1657. %current @case(@nochar(@getcdir),
  1658.                 3,{getchar(@getcdir,1,2)},
  1659.          ,{getcdir});
  1660. backclr(50,80,50);
  1661. footnote({});
  1662. stopbit(1);
  1663. dataleng({8bit});
  1664. xon({Yes});
  1665. rscs({Yes});
  1666. parity({None});
  1667. setoak({J});
  1668. click({No});
  1669. nattou({Yes});
  1670. lineend({CR});
  1671.  
  1672. /* オートパイロット停止時にPF12で再起動できるように */
  1673. setpf(12,{footnote({Loading..});}|
  1674.     {setcdir(} | @xc({7b}) | @getcdir | @xc({7d}) | {);} 
  1675.     | {#NYAN.PLT});
  1676.  
  1677.  
  1678. logd:={B:};    /* default */
  1679. case(@filechk( current | {\MOPSET.PLP}),
  1680.     {Yes},{#MOPSET.PLP},
  1681.     {No},{setupplt});
  1682.  
  1683. loop({
  1684.     select({処理を選んで下さい},999999,,
  1685.         {      自動通信を行います        },autoacc,
  1686.         {     受信文書の参照をします      },readdoc,
  1687.         {    送信文書の作成/更新をします     },senddoc,
  1688.         {      各種設定を変更します       },setupplt,
  1689.         {   自動処理を終了します(PF12で再起動)   },{stop},
  1690.         {    MOPTERMを終了します      },stopmop);
  1691.     im({Yes});
  1692. })
  1693.